package com.mydomain.Bodega;

import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;

import com.mydomain.Bodega.*;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.framework.EntityHome;

@Name("auxInvItemHome")
public class AuxInvItemHome extends EntityHome<AuxInvItem> {

		@In(create = true)
	InvGrupoHome invGrupoHome;
	@In(create = true)
	InvUnidadMedidaHome invUnidadMedidaHome;

	public void setAuxInvItemIteCodigo(String id) {
		setId(id);
	}

	
	
	public String getAuxInvItemIteCodigo() {
		return (String) getId();
	}

	@Override
	protected AuxInvItem createInstance() {
		AuxInvItem auxInvItem = new AuxInvItem();
		return auxInvItem;
	}

	public void wire() {
		getInstance();
		InvGrupo invGrupo = invGrupoHome.getDefinedInstance();
		if (invGrupo != null) {
			getInstance().setInvGrupo(invGrupo);
		}
		InvUnidadMedida invUnidadMedida = invUnidadMedidaHome
				.getDefinedInstance();
		if (invUnidadMedida != null) {
			getInstance().setInvUnidadMedida(invUnidadMedida);
		}
	}
public void metodoRegistroDeAuditoria(String varOperacion, String  varPantalla,String  codigo,EntityManager em){
		
		try {
			
			Subdepartamento subdepartamento = (Subdepartamento) getSessionContext()
			.get("usuarioLogeo");
			Auditoria auditoria = new Auditoria();
			auditoria.setAudPantalla(varPantalla);
			auditoria.setAudOperacion(varOperacion);
			auditoria.setAudFecha((new Date()));
			auditoria.setAudCodigoDeTabla(codigo);
			auditoria.setUsuario(subdepartamento.getUsuario());
			em.flush();
			em.persist(auditoria);
		} catch (Exception e) {
			// TODO: handle exception
		}

	}



	@Override
	@Transactional
	public String persist() {
		try {
			AuxInvItem auxInvItem = null;
			auxInvItem = getEntityManager().find(AuxInvItem.class,
					getInstance().getIteCodigo());
			if (auxInvItem == null) {
				getEntityManager().persist(getInstance());
				getFacesMessages().add("Se agrego un nuevo items !!!");
				metodoRegistroDeAuditoria("INSERTO","ITEMS",getInstance().getIteCodigo(),getEntityManager());
			} else {
				getFacesMessages().add("Ya existe este codigo !!!");
			}
		} catch (Exception e) {
			getFacesMessages().add(e.getMessage());
		}
		return null;
	}

	@Override
	@Transactional
	public String remove() {
		try {
			List validarSiExisteData = getEntityManager().createQuery(
					"SELECT i FROM InvItemStock i  "
							+ " where i.iteCodigo =:codigo").setParameter(
					"codigo", getInstance().getIteCodigo()).getResultList();
			if (validarSiExisteData.isEmpty()) {
				metodoRegistroDeAuditoria("BORRADO","ITEMS",getInstance().getIteCodigo(),getEntityManager());
				getEntityManager().remove(getInstance());
				getFacesMessages().add("Se elimino el ietms !!!");
				
			} else
				getFacesMessages()
						.add(
								"No se puede borrar por q esta registrado en el inventario !!! ");
		} catch (Exception e) {
			getFacesMessages().add(e.getMessage());
		}
		return null;
	}
	
	@Override
	@Transactional
	public String update(){
		getEntityManager().merge(getInstance());
		metodoRegistroDeAuditoria("AZTUALIZO","ITEMS",getInstance().getIteCodigo(),getEntityManager());
		getFacesMessages().add("Se actualizo el items");
		return null;
	}

	public boolean isWired() {
		return true;
	}

	public AuxInvItem getDefinedInstance() {
		return isIdDefined() ? getInstance() : null;
	}

}
